package com.orhon.smartcampus.modules.baseinfo.fetcher;


import com.orhon.smartcampus.basicComponents.Result;
import com.orhon.smartcampus.modules.base.gqlModel.GQLPageParam;
import com.orhon.smartcampus.modules.base.mm.EnvArgsMapper;
import com.orhon.smartcampus.modules.baseinfo.dao.TimetableItemDao;
import com.orhon.smartcampus.modules.baseinfo.entity.TimetableItem;
import com.orhon.smartcampus.modules.baseinfo.gqlModel.GQLTimetableItem;
import com.orhon.smartcampus.modules.baseinfo.mm.TimetableItemMapper;

import com.orhon.smartcampus.utils.ObjectToMap;
import com.orhon.smartcampus.utils.Util;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Component
public class TimetablesItemsFetcher implements DataFetcher {


	@Autowired
	TimetableItemDao timetableItemDao;

	@Override
	public Object get(DataFetchingEnvironment env) throws Exception {

		List<GQLTimetableItem> GQLTimetableItem = new ArrayList<>();

		GQLPageParam page = EnvArgsMapper.MAPPER.fromArgs(env);
		String hql = "from TimetableItem where deleted_at = null ";

		if(env.containsArgument("condition")) {
			HashMap<String,Object> map = ObjectToMap.to(env.getArgument("condition"));
			if(map.get("name")!=null) {
				hql += "and name "+ Util.decide(map.get("name"));
			}
			if(map.get("timetable_id")!=null) {
				hql += "and timetable_id " + Util.decide(map.get("timetable_id"));
			}
			if(map.get("type")!=null) {
				hql += "and type  " + Util.decide(map.get("type"));
			}
			if(map.get("is_classtime")!=null) {
				hql += "and is_classtime  " + Util.decide(map.get("is_classtime"));
			}
		}

		List<TimetableItem> list = timetableItemDao.find(hql,null,page.getPage(),page.getLimit());

		for (TimetableItem item : list) {

			GQLTimetableItem timetableItem = TimetableItemMapper.MAPPER.toTimetableItem(item);
			GQLTimetableItem.add(timetableItem);
		}
		Long total = 0L;
		if (env.getSelectionSet().contains("total")){
			total = timetableItemDao.getTotalCount(hql);
		}

		return Result.ok().put("data" , GQLTimetableItem).put("total" , total);
	}


}
